﻿using Platform.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PlatformManagement
{
    public partial class StockOutForm : DevComponents.DotNetBar.Metro.MetroForm
    {
        public StockOutForm()
        {
            InitializeComponent();
            dgvStock.AutoGenerateColumns = false;
            dgvPickingList.AutoGenerateColumns = false;
        }

        //Tạo biến lưu mã Stock
        private int stockid = 0;


        //Load form
        private void StockOutForm_Load(object sender, EventArgs e)
        {
            DisplayName();
          Load_Stock();
        }



        //Load stock
        private void Load_Stock()
        {
            dgvStock.DataSource = Stock.Objects.Where(x=>x.DeliQty >0).ToList();
        }
        //Hiển thị tên thay mã
        private void DisplayName()
        {
            //Load tên hàng hóa
            clArtId.DataSource = Article.Objects.Where(x => x.MarketId == 1).ToList();
            clArtId.DisplayMember = "ArtName";
            clArtId.ValueMember = "ID";

            clArtS.DataSource = Article.Objects.Where(x => x.MarketId == 1).ToList();
            clArtS.DisplayMember = "ArtName";
            clArtS.ValueMember = "ID";

            //Load tên kho
            clStoreId.DataSource = Store.Objects.All;
            clStoreId.DisplayMember = "StoreName";
            clStoreId.ValueMember = "Id";

            clStoreS.DataSource = Store.Objects.All;
            clStoreS.DisplayMember = "StoreName";
            clStoreS.ValueMember = "Id";

         
            //Load tên nhà cung cấp
            clSupS.DataSource = Supplier.Objects.Where(x => x.MarketId == 1).ToList();
            clSupS.DisplayMember = "Name";
            clSupS.ValueMember = "ID";

           
        }


        //Chọn một dòng trên stock thì load những mặt hàng chưa cân hoặc cân thiếu

        private void dgvStock_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (dgvStock.CurrentRow.Cells[0].Value != null && dgvStock.CurrentRow.Cells[0].Value.ToString() != "0")//Nếu dòng đang chọn có dữ liệu
                {
                    //Gán mã stock cho biến stockid
                    stockid = int.Parse(dgvStock.CurrentRow.Cells[0].Value.ToString());
                    dgvPickingList.DataSource =
                        PickingList.Objects.Where(
                            x =>
                            x.ArtId == int.Parse(dgvStock.CurrentRow.Cells[4].Value.ToString()) && x.OrderQty > x.Net).
                            ToList();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi \n" + ex.Message);
            }
        }

        //Khi chọn một dòng trên danh sách cân hàng
        private void dgvPickingList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.RowIndex != -1)//Dòng đang chọn không phải là tiêu đề
                {
                    if(e.ColumnIndex ==13)//Nếu nhấn vào nút pick thì tiến hành cân hàng từ hàng tồn đã chọn
                    {
                        if (dgvPickingList.CurrentRow.Cells[0].Value != null && dgvPickingList.CurrentRow.Cells[0].Value.ToString() != "0")
                        {
                            var stock = Stock.Objects.FirstOrDefault(x => x.Id == stockid);
                            var pick = dgvPickingList.Rows[e.RowIndex].DataBoundItem as PickingList;
                            float net = pick.OrderQty - pick.Net;
                            if (stock.DeliQty <= net)
                                //Nếu khối lượng trong kho nhỏ hơn hoặc bằng khối lượng mà đơn hàng đang thiếu thì cân tất cả cho đơn hàng đó
                            {
                                pick.Net = pick.Net + stock.DeliQty;
                                stock.DeliQty = 0;
                                stock.Package = 0;
                            }
                            else //Ngược lại chỉ cân vừa số lượng đang thiếu
                            {
                                pick.Net = net + pick.Net;
                                stock.DeliQty = stock.DeliQty - net;
                            }
                            stock.LastUpdated = DateTime.Now;
                            if (pick.OrderQty == pick.Net)
                                pick.Status = true;
                            else
                            {
                                pick.Status = false;
                            }
                            pick.LastUpdated = DateTime.Now;
                            PickingList.Objects.Update(pick);
                            Stock.Objects.Update(stock);
                            Load_Stock();
                            int artid = Stock.Objects.FirstOrDefault(x => x.Id == stockid).ArtId;
                            dgvPickingList.DataSource =
                                PickingList.Objects.Where(x => x.ArtId == artid && x.OrderQty > x.Net).ToList();
                        }
                    }
                   

                    

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi \n" + ex.Message);
            }

        }
    }
}
